var createError = require('http-errors');//处理错误路由的，了解。
var express = require('express');
var path = require('path');//路径工具
var cookieParser = require('cookie-parser');//用来解析cookie字段的，就是将cookie解析为用户和相应的信息用于之后的鉴权问题。
const session = require('express-session')//引用session插件实现了登录功能。
var logger = require('morgan');//记录日志的
const RedisStore = require('connect-redis')(session);//将之前引入的session就可以将其与redis相连接。

// var indexRouter = require('./routes/index'); //专门用于处理博客的路由
// var usersRouter = require('./routes/users');//专门用于处理用户相关的路由
const blogrouter = require('./routes/blog')
const userRouter = require('./routes/user')
var app = express();
const fs = require('fs')



// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
const logfilename = path.join(__dirname, 'logs', 'access.log')
const writestream = fs.createWriteStream(logfilename, {
  flags: 'a'
})
app.use(logger('combined', {
  stream: writestream
}));
app.use(express.json());//就是之前写的有关postdata的数据处理，就是比如你新建博客，会在发出post请求的时候将数据存放在req.body里，这个就是
app.use(express.urlencoded({ extended: false }));
//这个是兼容其它req.body的格式的，比如处理json格式，其它的格式也可以。
app.use(cookieParser());//解析cookie

const redisClient = require('./database/redis');//这里是开始连接redis了
const sessionStore = new RedisStore({
  client: redisClient
})

app.use(session({
  secret: 'WWFKJj_1231#',//为什么要加密，还不是很理解。
  cookie: {
    path: '/',//意思是前端访问各个路由的时候，可以获取这个cookie
    httpOnly: true,//默认配置
    maxAge: 24 * 60 * 60 * 1000
  },
  store: sessionStore//这里就将session存储到了redis中了
}))

// app.use(express.static(path.join(__dirname, 'public')));//与public文件有关系。


//用来注册路由的
// app.use('/', indexRouter);
app.use('/api/user', userRouter)
app.use('/api/blog', blogrouter)//这里已经懂了其实就是，第一个参数是根路由就是定死的，而后边的是基于这个路由所处理的路由的相应的方法

// /api/blog/list
// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'dev' ? err : {};//就是如果出错了，开发环境会报错，其它环境就不会去报错了。

  // render the error page
  res.status(err.status || 500);
  res.end('error');
});

module.exports = app;
